/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tarifador.controller;

import br.com.tarifador.dao.TarifadorDao;
import br.com.tarifador.model.*;
import br.com.tarifador.util.ManipulaLocalidades;
import java.util.ArrayList;
import java.util.List;
import org.jboss.logging.Logger;

/**
 *
 * @author charles
 */
public class EmpresaRN {

    private Empresa empresa = new Empresa();
    private ContatoEmpresa contato = new ContatoEmpresa();
    private Localidades localidades = new Localidades();
    private TarifadorDao<Empresa> dao;
    private String messagemCount;
    private TarifadorDao<Localidades> daoCep;
    private TarifadorDao<ContatoEmpresa> daoContato;
    boolean local, contact, corporate;

    public boolean salvarEmpresa() {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        boolean valida = false;
        try {
            if (empresa.getRazaoSocial() != null && !empresa.getRazaoSocial().equals("")) {
                daoCep = new TarifadorDao<Localidades>(Localidades.class);
                local = daoCep.equals(localidades);
               if (local ==true) {
              //Aqui preciso salvar todos para gera os id no banco
              //17/06/2013 
               }
                   
                contato.setEndereco(localidades);
                empresa.setContato(contato);
                valida = dao.save(empresa);
                countEmpresa();
            }
        } catch (NullPointerException e) {
            valida = false;
            throw new RuntimeException(e);
        }
        return valida;
    }

    public List<Empresa> carregaListaEmpresa() {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        List<Empresa> lista = dao.listall();
        countEmpresa();
        return lista;
    }

    public boolean updateEmpresa(Empresa idEmpresa) {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        boolean valida = false;
        if (idEmpresa != null) {
            empresa.setId(idEmpresa.getId());
            contato.setEndereco(localidades);
            empresa.setContato(contato);
            valida = dao.update(empresa);
        }
        return valida;
    }

    public void limparCampos() {
        this.empresa.setRazaoSocial("");
        this.empresa.setNomeFantasia(null);
        this.empresa.setContato(null);
    }

    public String countEmpresa() {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        Long valor = dao.countAllObject();
        return this.messagemCount = valor.toString() + " empresas cadastradas.";
    }

    public boolean deletaEmpresa(Long idEmpresa) {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        boolean valida = false;
        boolean contatoDelete = false;

        if (idEmpresa != null) {

            daoCep = new TarifadorDao<Localidades>(Localidades.class);
            boolean localidadeDelete = daoCep.delete(contato.getEndereco());
            if (localidadeDelete == true) {
                daoContato = new TarifadorDao<ContatoEmpresa>(ContatoEmpresa.class);
                contatoDelete = daoContato.delete(empresa.getContato());
            }
            if (contatoDelete == true) {
                empresa.setId(idEmpresa);
                valida = dao.delete(empresa);
                countEmpresa();
            }


        }
        return valida;
    }

    public List<Empresa> listaDeRamais() {
        dao = new TarifadorDao<Empresa>(Empresa.class);
        List<Empresa> lista = dao.listall();
        return lista;
    }

    public String sobreEmpresa() {
        String texto = "O cadastro de empresa permite a utilização para a geração de relatórios do PABX."
                + "Caso a empresa não eteje cadastrada o usuário não poderá utilizar o sistema de relatórios.";
        return texto;
    }

    public List<Localidades> oncompleteCep(String paramCep) {
        daoCep = new TarifadorDao<Localidades>(Localidades.class);
        Logger.getLogger(EmpresaRN.class.getName()).log(Logger.Level.INFO, "Cep: " + paramCep);
        List<Localidades> lista = daoCep.listallparam("cep", paramCep);
        return new ManipulaLocalidades().manipulalistaDeAspas(lista);
    }
    //Getters and Setters 

    public TarifadorDao<Empresa> getDao() {
        return dao;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public String getMessagemCount() {
        return messagemCount;
    }

    public void setMessagemCount(String messagemCount) {
        this.messagemCount = messagemCount;
    }

    public ContatoEmpresa getContato() {
        return contato;
    }

    public void setContato(ContatoEmpresa contato) {
        this.contato = contato;
    }

    public Localidades getLocalidades() {
        return localidades;
    }

    public void setLocalidades(Localidades localidades) {
        this.localidades = localidades;
    }
}
